package main

import "fmt"

// 检查每行每列 元素只有1~n

func isValidMatrix(input [][]int) bool {
	N := len(input[0])
	for i := 0; i < N; i++ {
		rowSet := make(map[int]bool)
		colSet := make(map[int]bool)
		for j := 0; j < N; j++ {
			// check row
			if _, ok := rowSet[input[i][j]]; ok == true {
				return false
			} else if input[i][j] > N || input[i][j] < 1 {
				return false
			} else {
				rowSet[input[i][j]] = true
				if len(rowSet) > N {
					return false
				}
			}
			// check col
			if _, ok := colSet[input[j][i]]; ok == true {
				return false
			} else if input[j][i] > N || input[j][i] < 1 {
				return false
			} else {
				colSet[input[i][j]] = true
				if len(colSet) > N {
					return false
				}
			}
		}
	}
	return true
}

func main() {
	input := [][]int{
		[]int{1, 2, 3},
		[]int{2, 3, 1},
		[]int{3, 4, 2},
	}
	fmt.Println(isValidMatrix(input))

}
